package com.cdxy.service;

import com.cdxy.model.dto.base.resp.BasePageResp;
import com.cdxy.model.dto.req.*;
import com.cdxy.model.dto.resp.CreateOrderResp;
import com.cdxy.model.dto.resp.OrderDetailResp;
import com.cdxy.model.dto.resp.OrderListResp;
import com.cdxy.model.dto.resp.SuccessStatusAckResp;
import com.cdxy.model.info.OrderStatusInfo;

import java.util.Map;

/**
 * @Author: tangy
 * @Date: 2020/4/7 17:12
 */
public interface IRechargeService {
    /**
     * 阿里云支付通知
     *
     * @param param
     * @return
     */
    String aliPayNotifyScene(Map<String, String> param);

    /**
     * 阿里云支付通知
     *
     * @param param
     * @return
     */
    String aliPayNotifyHotel(Map<String, String> param);

    /**
     * 取消订单
     *
     * @param cancelOrderReq
     */
    void cancelOrder(CancelOrderReq cancelOrderReq);

    /**
     * 创建景点订单
     *
     * @param sceneOrderReq
     * @return
     */
    CreateOrderResp createSceneOrder(SceneOrderReq sceneOrderReq);

    /**
     * 继续支付订单
     *
     * @param continueOrderReq
     * @return
     */
    CreateOrderResp continueOrder(ContinueOrderReq continueOrderReq);

    /**
     * 创建酒店订单
     *
     * @param sceneOrderReq
     * @return
     */
    CreateOrderResp createHotelOrder(SceneOrderReq sceneOrderReq);

    /**
     * 关闭订单
     *
     * @param bizNo
     * @return
     */
    SuccessStatusAckResp closeOrder(String bizNo);

    /**
     * 退款
     *
     * @param bizNo
     * @param amount
     * @return
     */
    void refundOrder(String bizNo, Integer amount);

    /**
     * 解析订单
     *
     * @param notifyBody
     * @return
     */
    SuccessStatusAckResp notifyParse(Map<String, String> notifyBody);

    /**
     * 查询订单状态
     *
     * @param bizNo
     * @return
     */
    OrderStatusInfo queryOrder(String bizNo);

    /**
     * 查询景点支付成功与否
     *
     * @param successAckReq
     * @return
     */
    SuccessStatusAckResp sceneSuccessAck(SceneSuccessAckReq successAckReq);

    /**
     * 查询酒店支付成功与否
     *
     * @param successAckReq
     * @return
     */
    SuccessStatusAckResp hotelSuccessAck(SceneSuccessAckReq successAckReq);

    /**
     * 订单列表
     *
     * @param orderListReq
     * @return
     */
    BasePageResp<OrderListResp> orderList(OrderListReq orderListReq);

    /**
     * 订单详情
     *
     * @param orderDetailReq
     * @return
     */
    OrderDetailResp orderDetail(OrderDetailReq orderDetailReq);

    /**
     * 支付失效时间
     */
    void payValidTime();
}
